const {
  getPositions,
  updateOnePos,
  delOnePos,
  addOnePos
} = require("../model/position");
const formidable = require('formidable')
const path = require('path')
// 列表渲染
const renderList = (req, resp) => {
  // 调用来自model层的getPositions方法获取到数据库里的数据
  //获取1-5
  const perpage = Number(req.query.perpage)
  getPositions(1,perpage).then(({positions, total}) => {
    resp.render("list", { positions,total });
  });
};

// 扩展：async await版
// const renderList = async (req, resp) => {
//   // 调用来自model层的getPositions方法获取到数据库里的数据
//   // await修饰的函数调用的返回值就是这个异步函数里resolve的参数
//   const positions = await getPositions()
//   resp.render('list', { positions })
// }
// 列表跟新
const updatePos = (req, resp) => {
  // 取到参数，根据这些值取修改数据库
  const { id, title, company, salary, experience } = req.query;
  // 这里的写法是为了不要直接传递req.query，因为把对象作为参数传递的是引用
  updateOnePos({ id, title, company, salary, experience })
    .then(pos => {
      resp.json({
        code: 200,
        body: {
          msg: "更新成功",
          pos
        }
      });
    })
    .catch(() => {
      resp.json({
        code: 202,
        body: {
          msg: "网络错误，请重试"
        }
      });
    });
};
//删除数据
const delPos = (req, resp) => {
  const { id } = req.query;
  delOnePos(id).then(pos => {
    resp
      .json({
        code: 200,
        body: {
          msg: "删除成功"
        }
      })
      .catch(() => {
        resp.json({
          code: 400,
          body: { msg: "删除失败" }
        });
      });
  });
};
//增加一条数据
const addPos = (req, resp) => {
  // 调用formidable得到上传的form
  // uploadDir配置文件存储路径
  // keepExtensions 是否保留文件后缀名
  const form = formidable({
    multiples: true,
    uploadDir: path.join(__dirname, '../public/upload'),
    keepExtensions: true
  })
  // 解析form，在回调里得到form的解析结果
  form.parse(req, (err, fields, files) => {
    if (err) return err;
    // 这里就是核心逻辑
    // fields是个对象，这里面包含了除文件以外的其他字段
    // files就是这次上传的文件对象
    // console.log(fields)
    // console.log(files)
    // 要把文件存在public/upload目录里（这件事你只要在配置项里写好了，formidable这个包自动帮咱们存进去了）
    // 把文件路径以及其他三个字段的值一起存入数据库
    const { title, company, salary,experience } = fields
    // console.log(files.logo.path)
    const { base } =  path.parse(files.logo.path)
    const logo = `/upload/${base}`
    addOnePos({ title, company, salary, logo, experience })
      .then(pos => {
        resp.json({
          code: 200,
          body: {
            msg: '新增成功',
            pos
          }
        })
      })
  })
}
//page
const page = (req, resp) => {
  // 由于req.query解析出来是个字符串，所以转成数字
  const n = Number(req.query.n)
  const perpage = Number(req.query.perpage)
  getPositions(n, perpage).then(({ positions, n, total }) => {
    resp.json({
      code: 200,
      body: {
        positions,
        total,
        n
      }
    })
  })
}
module.exports = {
  renderList,
  updatePos,
  delPos,
  addPos,
  page
};
